home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 007 / strbrk.arc / KEYSCAN.ASM < prev   
Assembly Source File  |  1985-11-20  |  3KB  |  74 lines

  1. COMMENT " Routine KEYSCAN returns scan code and ASCII code      
  2.            (if any) for each keystroke, until Ctrl-Brk.
  3.  
  4. Author:  Ted Mirecki  June 1984
  5. "
  6. ASMUTIL    SEGMENT BYTE PUBLIC 'CODE'
  7.            ASSUME CS:ASMUTIL, DS:ASMUTIL
  8.            ORG     100H
  9. KEYSCAN    PROC
  10.            JMP     SHORT PASTDATA
  11. KEYCODE    DB      ?,?,?,?,0DH,0AH,'$'
  12. MSG        DB      'Strike any key, Ctrl-Break to exit',0DH,0AH
  13.            DB       '$'
  14.  
  15. PASTDATA:  MOV     DX,OFFSET MSG  ;ISSUE SIGN-ON MESSAGE       
  16.            MOV     AH,9
  17.            INT     21H
  18.  
  19. GETKB:     SUB     AX,AX               ;READ THE KEYBOARD
  20.            INT     16H                 ;WAIT FOR KEYSTROKE
  21.            MOV     DI,OFFSET KEYCODE   ;POINT TO CHAR AREA
  22.            CALL    AX2HEX
  23.            MOV     DX,OFFSET KEYCODE   ;DISPLAY HEX CHARACTERS
  24.            MOV     AH,9
  25.            INT     21H
  26.            JMP     GETKB               ;GO GET NEXT KEYSTROKE
  27. KEYSCAN    ENDP
  28. ASMUTIL    ENDS
  29.  
  30.  
  31. COMMENT " Routine AX2HEX converts value in AX to 4 hex chars.
  32.  
  33. Author:  Ted Mirecki  January 1984
  34.  
  35.      INPUT:  Value to be converted in AX.
  36.              ES:DI points to buffer to receive characters
  37.                    (Length 4 bytes).
  38.  
  39.      OUTPUT: 4 hex characters (0 - F) in output buffer.
  40.              DI points 1 byte past last character.
  41.              AX destroyed, other regs unchanged.
  42. "
  43. ASMUTIL    SEGMENT BYTE PUBLIC 'CODE'
  44.            ASSUME  CS:ASMUTIL
  45. AX2HEX     PROC    NEAR
  46.            PUBLIC  AX2HEX
  47.  
  48.            CLD                    ;GO FORWARD THRU STRINGS
  49.            PUSH    BX             ;SAVE RESGISTERS
  50.            PUSH    CX
  51.            PUSH    DX
  52.            MOV     BX,OFFSET HEX  ;POINT TO HEX DIGIT CHARS
  53.            MOV     CX,4           ;WILL HANDLE 4 NIBBLES
  54.  
  55. NEXTNIBL:  ROL     AX,1           ;HI-ORDER NIBBLE TO 
  56.            ROL     AX,1          ;LO-ORDER OF AX
  57.            ROL     AX,1
  58.            ROL     AX,1
  59.            MOV     DX,AX          ;SAVE IT IN DX
  60.            AND     AL,0FH         ;ISOLATE LOW-ORDER NIBBLE
  61.            XLAT    CS:HEX         ;TRANSLATE TO HEX DIGIT
  62.            STOSB                  ;PUT HEX DIGIT INTO OUTPUT
  63.            MOV     AX,DX          ;RECOVER AX VALUE
  64.            LOOP    NEXTNIBL       ;REPEAT FOR 4 NIBBLES
  65.  
  66.            POP     DX             ;RESTORE REGS & EXIT
  67.            POP     CX
  68.            POP     BX
  69.            RET
  70. AX2HEX     ENDP
  71. HEX        DB      '0123456789ABCDEF'
  72. ASMUTIL    ENDS
  73.            END     KEYSCAN
  74.